const express = require('express');
const app = express(); // 创建express实例，赋值给app。
const server = require('http').Server(app);
const io = require('socket.io')(server); //将socket的监听加到app设置的模块里。这两句理解不了的可以去socket.io官网去看
const path = require('path'); // 这是node的路径处理模块，可以格式化路径

server.listen(3000, () => {
    console.log("server running at 127.0.0.1:3000"); // 代表监听3000端口，然后执行回调函数在控制台输出。  
});

app.get('/', (req, res) => {
    res.redirect('/static/index.html'); // express的重定向函数。如果浏览器请求了根路由'/',浏览器就给他重定向到 '127.0.0.1:3000/chat.html'路由中
});

app.use('/static', express.static(path.join(__dirname, './dist'))); //一句话就搞定。

let onlineUsers = []; //当前在线人员
/*socket*/
io.on('connection', (socket) => { //监听客户端的连接事件  
    socket.on('login', (data) => {
        onlineUsers.push(data)
        io.emit('loginResult', {
            userName: data.name,
            usersNum: onlineUsers.length
        });
    });
    /** 
     * 监听sendMessage,我们得到客户端传过来的data里的message，并存起来。 
     */
    socket.on('send', (data) => {
        // 将信息发给所有浏览器 - 广播事件
        io.emit('send', {
            data: data
        });
    });
    socket.on('logout', (data) => {
        let newOnlineUsers = [];
        for (let i in onlineUsers) {
            if (onlineUsers[i].name !== data.name) {
                newOnlineUsers.push(onlineUsers[i])
            }
        }
        onlineUsers = newOnlineUsers;
        io.emit('logoutResult', {
            userName: data.name,
            usersNum: onlineUsers.length
        });
    });
    socket.on('onbeforeunload', (data) => {
        let newOnlineUsers = [];
        for (let i in onlineUsers) {
            if (onlineUsers[i].name !== data.name) {
                newOnlineUsers.push(onlineUsers[i])
            }
        }
        onlineUsers = newOnlineUsers
        io.emit('onbeforeunloadResult', {
            userName: data.name,
            usersNum: onlineUsers.length
        });
    });
    //连接后做的事情  
    socket.on('connect', () => { //注意，该事件不需要自定义触发器，系统会自动调用  
        usersNum = onlineUsers.length;
        console.log(`当前在线登录人数：${usersNum}`);
    });

    //断开连接后做的事情  
    socket.on('disconnect', () => {
        io.emit('logoutResult', {
            userName: 'shishuine',
            usersNum: onlineUsers.length
        });
    });
});
